home *** CD-ROM | disk | FTP | other *** search
/ AOL File Library: 2,801 to 2,900 / aol-file-protocol-4400-2801-to-2900.zip / AOLDLs / C++ Files Library / Direct Blitting in C++ / Blitting.sit / Blitting ƒ / CDirectVideo.cp < prev    next >
Text File  |  2014-09-28  |  2KB  |  80 lines

  1. // CDirectVideo.cp, the CDirectVideo class methods
  2. //
  3. // Copyright ⌐ 1995, Macneil Shonle. All rights reserved.
  4.  
  5. #ifndef __CDIRECTVIDEO__
  6. #include <CDirectVideo.h>
  7. #endif
  8.  
  9. #ifndef __PIXELTYPES__
  10. #include <PixelTypes.h>
  11. #endif
  12.  
  13. #ifndef __QDOFFSCREEN__
  14. #include <QDOffscreen.h>
  15. #endif
  16.  
  17. CDirectVideo::CDirectVideo( GDHandle device, Rect *bounds )
  18. {    mGDevice = device;
  19.     
  20.     PixMapHandle theGDPixMap = (*mGDevice)->gdPMap;
  21.     
  22.         // if no bounds are given, use the whole device
  23.     mBounds = (bounds != nil) ? *bounds : (*theGDPixMap)->bounds;
  24.     
  25.     NewCleanCPort( mPort, mBounds );
  26.     
  27.     mBitDepth = BitDepth((*theGDPixMap)->pixelSize);
  28.     mAddressingMode = true32b;        // for 32-Bit QuickDraw, see Graphic Truffles August 1992,
  29.                                     // "Writing Directly To The Screen"
  30.     mRowBytes = RowWidth((*theGDPixMap)->rowBytes & 0x1FFFL);
  31.     
  32.         // set the base address
  33.     mBaseAddress = PixelPtr(::GetPixBaseAddr( theGDPixMap )) + mBounds.top * mRowBytes;
  34.     if( mBitDepth < kEightBit )
  35.         mBaseAddress += mBounds.left / (8 / mBitDepth);
  36.     else
  37.         mBaseAddress += mBounds.left * (mBitDepth / 8);
  38.     
  39.     BuildQuickRow();
  40. }
  41.  
  42. CDirectVideo::~CDirectVideo()
  43. {    DestroyQuickRow();
  44.     DisposeCleanCPort( mPort );
  45. }
  46.  
  47. void CDirectVideo::NewCleanCPort( CGrafPtr &theGrafPort, const Rect &theBounds )
  48. {    GrafPtr origPort;
  49.     ::GetPort( &origPort );
  50.     
  51.         // allocate and init the memory
  52.     theGrafPort = new CGrafPort;
  53.     ::OpenCPort( theGrafPort );
  54.     
  55.     ::SetPort( GrafPtr(theGrafPort) );
  56.     
  57.         // init the QuickDraw structure members
  58.     Rect zeroBounds = theBounds;
  59.     ::OffsetRect( &zeroBounds, -zeroBounds.left, -zeroBounds.top );
  60.     
  61.         // init the drawing region
  62.     RgnHandle drawRegion = ::NewRgn();
  63.     ::OpenRgn();
  64.     ::FrameRect( &zeroBounds );
  65.     ::CloseRgn( drawRegion );
  66.     
  67.     ::CopyRgn( drawRegion, theGrafPort->visRgn );
  68.     ::CopyRgn( drawRegion, theGrafPort->clipRgn );
  69.     
  70.     ::PortSize( zeroBounds.right, zeroBounds.bottom );
  71.     ::MovePortTo( theBounds.left, theBounds.top );
  72.     
  73.     ::SetPort( origPort );
  74. }
  75.  
  76. void CDirectVideo::DisposeCleanCPort( CGrafPtr &theGrafPort )
  77. {    ::CloseCPort( theGrafPort );
  78.     delete theGrafPort;
  79. }
  80.